1 module hip.audio.backend.avaudio.source;
2 
3 version(iOS):
4 import avaudiosourcenode;
5 import avaudioplayernode;
6 import avaudiosinknode;
7 import avaudioionode;
8 import hip.audio.backend.avaudio.clip;
9 import hip.error.handler;
10 import hip.audio.backend.avaudio.player;
11 import hip.audio.audiosource;
12 
13 class HipAVAudioSource : HipAudioSource
14 {
15     AVAudioSinkNode sink;
16     AVAudioPlayerNode player;
17     AVAudioPCMBuffer buffer;
18 
19     protected bool isClipDirty = true;
20 
21 
22     this(HipAVAudioPlayer player)
23     {
24         this.player = player.playerNode;
25     }
26     alias clip = HipAudioSource.clip;
27 
28 
29     override IHipAudioClip clip(IHipAudioClip newClip)
30     {
31         if(newClip != clip)
32             isClipDirty = true;
33         super.clip(newClip);
34         return newClip;
35     }
36 
37     alias loop = HipAudioSource.loop;
38     override bool loop(bool value)
39     {
40         bool ret = super.loop(value);
41         return ret;
42     }
43 
44 
45 
46     override bool play()
47     {
48         import hip.audio.clip;
49         if(isPlaying)
50         {
51         }
52         AVAudioPCMBuffer b = getBufferFromAPI(clip).avaudio;
53         player.scheduleBuffer(b);
54         player.play();
55         return true;
56     }
57     override bool stop()
58     {
59         player.stop();
60         isPlaying = false;
61         return false;
62     }
63     override bool pause()
64     {
65         player.pause();
66         isPaused = true;
67         return false;
68     }
69     override bool play_streamed() => false;
70 
71 
72     ~this()
73     {
74 
75     }
76 }